// import org.apache.poi.ooxml.POIXMLDocumentPart;
// import org.apache.poi.ss.util.CellRangeAddress;
// import org.apache.poi.xslf.usermodel.*;
// import org.apache.poi.xddf.usermodel.*;
// import org.apache.poi.xddf.usermodel.chart.*;
// import org.apache.poi.ss.usermodel.*;
// import org.apache.poi.xssf.usermodel.XSSFWorkbook;
//
// import java.io.*;
// import java.util.*;
//
// public class UpdateComboChart {
//     public static void main(String[] args) throws Exception {
//         String file = "template.pptx";
//         XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file));
//
//         for (XSLFSlide slide : ppt.getSlides()) {
//             for (XSLFShape shape : slide.getShapes()) {
//                 if (shape instanceof XSLFChart) {
//                     XSLFChart chart = (XSLFChart) shape;
//
//                     // 1️⃣ 获取内嵌 Excel 数据表
//                     XSSFWorkbook wb = null;
//                     for (POIXMLDocumentPart part : chart.getRelations()) {
//                         if (part instanceof XSSFWorkbook) {
//                             wb = (XSSFWorkbook) part;
//                             break;
//                         }
//                     }
//                     if (wb == null) continue;
//
//                     Sheet sheet = wb.getSheetAt(0);
//                     // 清空旧数据
//                     for (int i = sheet.getFirstRowNum(); i <= sheet.getLastRowNum(); i++) {
//                         sheet.removeRow(sheet.getRow(i));
//                     }
//
//                     // 2️⃣ 写入新数据
//                     Object[][] data = {
//                             {"季度", "销售额", "增长率"},
//                             {"Q1", 100, 0.2},
//                             {"Q2", 120, 0.3},
//                             {"Q3", 90, 0.15},
//                             {"Q4", 130, 0.25},
//                     };
//
//                     for (int r = 0; r < data.length; r++) {
//                         Row row = sheet.createRow(r);
//                         for (int c = 0; c < data[r].length; c++) {
//                             Cell cell = row.createCell(c);
//                             if (data[r][c] instanceof String) {
//                                 cell.setCellValue((String) data[r][c]);
//                             } else if (data[r][c] instanceof Number) {
//                                 cell.setCellValue(((Number) data[r][c]).doubleValue());
//                             }
//                         }
//                     }
//
//                     // 3️⃣ 构建数据源（XDDF）
//                     XDDFDataSource<String> categories = XDDFDataSourcesFactory.fromStringCellRange(sheet,
//                             new CellRangeAddress(1, 4, 0, 0));
//                     XDDFNumericalDataSource<Double> sales = XDDFDataSourcesFactory.fromNumericCellRange(sheet,
//                             new CellRangeAddress(1, 4, 1, 1));
//                     XDDFNumericalDataSource<Double> growth = XDDFDataSourcesFactory.fromNumericCellRange(sheet,
//                             new CellRangeAddress(1, 4, 2, 2));
//
//                     // 4️⃣ 创建组合图
//                     XDDFChartLegend legend = chart.getOrAddLegend();
//                     legend.setPosition(LegendPosition.BOTTOM);
//
//                     // (1) 柱状图系列
//                     XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
//                     XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);
//                     XDDFChartData barData = chart.createData(ChartTypes.BAR, bottomAxis, leftAxis);
//                     XDDFChartData.Series barSeries = barData.addSeries(categories, sales);
//                     barSeries.setTitle("销售额", null);
//                     chart.plot(barData);
//
//                     // (2) 折线图系列
//                     XDDFValueAxis rightAxis = chart.createValueAxis(AxisPosition.RIGHT);
//                     rightAxis.setCrosses(AxisCrosses.MAX);
//                     XDDFChartData lineData = chart.createData(ChartTypes.LINE, bottomAxis, rightAxis);
//                     XDDFChartData.Series lineSeries = lineData.addSeries(categories, growth);
//                     lineSeries.setTitle("增长率", null);
//                     chart.plot(lineData);
//
//                     // 5️⃣ 刷新保存
//                     try (FileOutputStream out = new FileOutputStream("updated_" + file)) {
//                         ppt.write(out);
//                     }
//                     wb.close();
//                     ppt.close();
//                     System.out.println("✅ 图表更新完成！");
//                     return;
//                 }
//             }
//         }
//     }
// }
